import { createClient } from "redis";
import { redisOption } from "./config.js";
class RedisClient {
  constructor() {
    this.client = createClient(redisOption);
    //监听客户端连接错误
    this.client.on("error", async (err) => {
      console.log("---redis正在监听连接错误，信息如下：---");
      console.log(err);
    });
  }
  //连接redis
  connect() {
    return new Promise(async (reslove, reject) => {
      this.client
        .connect()
        .then(() => {
          reslove();
        })
        .catch((err) => {
          console.log("---redis连接失败---");
          reject(err);
        });
    });
  }
  //释放连接
  disrealseRedis() {
    return new Promise((reslove, reject) => {
      this.client
        .disconnect()
        .then(() => {
          reslove("释放完成!");
        })
        .catch((err) => {
          console.log("---redis连接---释放失败---");
          reject(err);
        });
    });
  }
  //执行命令
  executeCommand(command, ...args) {
    return new Promise((reslove, reject) => {
      try {
        const func = new Function(
          "client",
          "args",
          `return client.${command}(...args)`
        );
        func(this.client, args)
          .then((res) => {
            reslove(res);
          })
          .catch((err) => {
            console.log("---redis操作执行命令意外失败---");
            reject(err);
          });
      } catch (error) {
        console.log("---redis操作执行命令不存在---");
        reject('哈哈哈');
      }
    });
  }
}
export default RedisClient;
//普通字符串方法：
//增  client.set("hbh",'胡炳华')
//删  client.del("hbh")
//查  client.get("hbh")
//便捷设置有效期 client.setEx("hbh",60,'胡炳华'),60s
//修改就是覆盖 client.set("hbh",'胡炳华2')
//哈希结构操作方法
//增 client.hSet('love',{'a':'1',c:9})
//删除单个key client.hDel('love','b')
//删除整个key client.del('love')
//查 client.hGet("hbh")
//设置有效期 client.expire('love', 60);秒为单位
